/**
 * Review路由模块
 * routes\reviews.js
 */
 
/**
 * @swagger
 * 
 * components:
 *   schemas:
 *     BookReview:
 *       type: object
 *       properties:
 *         id:
 *           type: integer
 *           format: int64
 *           example: 10
 *         book_id:
 *           type: integer
 *         user_id:
 *           type: integer
 *         title:
 *           type: string
 *         content:
 *           type: string
 *         useful:
 *           type: integer
 *         useless:
 *           type: integer
 *         created_time:
 *           type: string
 *           format: date-time
 *         updated_time:
 *           type: string
 *           format: date-time
 *         bookTitle:
 *           type: string
 *           description: 书名
 *         pic:
 *           type: string
 *           description: 书籍封面远程url
 *         localPic:
 *           type: string
 *           description: 书籍封面本地地址
 *         producer:
 *           type: string
 *           description: 出品方
 *         subtitle:
 *           type: string
 *           description: 副标题
 *         originalTitle:
 *           type: string
 *           description: 原作名
 *         author:
 *           type: string
 *           description: 作者
 *         publisher:
 *           type: string
 *           description: 出版社 
 *         translator:
 *           type: string
 *           description: 译者 
 *         pubdate:
 *           type: string
 *           description: 出版日期 
 *         pages:
 *           type: string
 *           description: 页数 
 *         price:
 *           type: string
 *           description: 价格  
 *         binding:
 *           type: string
 *           description: 装帧
 *         series:
 *           type: string
 *           description: 系列  
 *         isbn:
 *           type: string
 *           description: ISBN号   
 *         intro:
 *           type: string
 *           description: 内容简介           
 *         doubanId:
 *           type: string
 *           description: 豆瓣读书ID     
 *         username:
 *           type: string
 *         nickname:
 *           type: string 
 */
 
/**
 * @swagger
 * 
 * components:
 *   schemas:
 *     Review:
 *       type: object
 *       properties:
 *         id:
 *           type: integer
 *           format: int64
 *         book_id:
 *           type: integer
 *         user_id:
 *           type: integer
 *         title:
 *           type: string
 *         content:
 *           type: string
 *         useful:
 *           type: integer
 *         useless:
 *           type: integer
 *         created_time:
 *           type: string
 *           format: date-time
 *         updated_time:
 *           type: string
 *           format: date-time
 */
 
var express = require("express");
var router = express.Router();
 
const review = require("../controller/review");
const auth = require("../controller/auth");
 
//定义路由
 
//守卫路由：所有路由必须执行权限控制的判断
router.all("*", auth.isLogin);
 
/**
 * @swagger
 * /reviews/count:
 *   get: 
 *     tags: 
 *       - 评论路由
 *     summary: 获取指定书籍的评论总数
 *     description: 返回指定书籍的评论总数
 *     parameters:
 *       - name: book_id
 *         in: query
 *         description: 书籍id
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: object
 *                   properties:
 *                     total:
 *                       type: integer           
*/
router.get('/count', review.getCount);
 
/**
 * @swagger
 * /reviews:
 *   get: 
 *     tags: 
 *       - 评论路由
 *     summary: 获取评论列表信息
 *     description: 返回所有评论列表信息
 *     parameters:
 *       - name: book_id
 *         in: query
 *         description: 书籍id
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *       - name: order_by
 *         in: query
 *         description: 排序字段
 *         required: false
 *         explode: true
 *         schema:
 *           type: string 
 *       - name: sort
 *         in: query
 *         description: 排序方式
 *         required: false
 *         explode: true
 *         schema:
 *           type: string 
 *       - name: limit
 *         in: query
 *         description: 查询数量
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *       - name: offset
 *         in: query
 *         description: 查询偏移量
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/BookReview'
*/
router.get('/', review.findAll);
 
/**
 * @swagger
 * /reviews/{id}:
 *   get: 
 *     tags: 
 *       - 评论路由
 *     summary: 获取指定ID评论信息
 *     description: 返回指定评论信息
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: 评论的内部ID 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   $ref: '#/components/schemas/BookReview' 
*/
router.get('/:id', review.find);
 
/**
 * @swagger
 * /reviews:
 *   post: 
 *     tags: 
 *       - 评论路由
 *     summary: 新增评论信息
 *     description: 新增
 *     requestBody:
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               $ref: '#/components/schemas/Review'
 *       required: true
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: string
 * 
 */
router.post('/', review.add);
 
/**
 * @swagger
 * /reviews/{id}:
 *   put: 
 *     tags: 
 *       - 评论路由
 *     summary: 修改评论信息
 *     description: 修改
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: 书架的内部ID 
 *     requestBody:
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               $ref: '#/components/schemas/Review'
 *       required: true
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: string
 * 
 */
router.put('/:id', review.update);
 
/**
 * @swagger
 * /reviews/{id}:
 *   delete: 
 *     tags: 
 *       - 评论路由
 *     summary: 删除评论信息
 *     description: 删除
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: 书架记录的内部ID 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: string
 * 
*/
router.delete('/:id', review.remove);

/**
 * @swagger
 * /reviews/useful/{id}:
 *   patch: 
 *     tags: 
 *       - 评论路由
 *     summary: 评论有用
 *     description: 评论有用
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: 评论的内部ID 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: string
 * 
*/
router.patch('/useful/:id', review.updateUseful);
 
/**
 * @swagger
 * /reviews/useless/{id}:
 *   patch: 
 *     tags: 
 *       - 评论路由
 *     summary: 评论无用
 *     description: 评论无用
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: 评论的内部ID 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: string
 * 
*/
router.patch('/useless/:id', review.updateUseless);

/**
 * @swagger
 * /reviews/user/count:
 *   get: 
 *     tags: 
 *       - 评论路由
 *     summary: 获取指定用户的评论总数
 *     description: 返回指定用户的评论总数
 *     parameters:
 *       - name: user_id
 *         in: query
 *         description: 用户id
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: object
 *                   properties:
 *                     total:
 *                       type: integer           
*/
router.get("/user/count", review.getCountByUserId);
 
/**
 * @swagger
 * /reviews/user:
 *   get: 
 *     tags: 
 *       - 评论路由
 *     summary: 获取评论列表信息
 *     description: 返回所有评论列表信息
 *     parameters:
 *       - name: user_id
 *         in: query
 *         description: 用户id
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *       - name: order_by
 *         in: query
 *         description: 排序字段
 *         required: false
 *         explode: true
 *         schema:
 *           type: string 
 *       - name: sort
 *         in: query
 *         description: 排序方式
 *         required: false
 *         explode: true
 *         schema:
 *           type: string 
 *       - name: limit
 *         in: query
 *         description: 查询数量
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer
 *       - name: offset
 *         in: query
 *         description: 查询偏移量
 *         required: false
 *         explode: true
 *         schema:
 *           type: integer 
 *     responses:
 *       200: 
 *         description: "Web成功访问"
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 code:
 *                   type: integer
 *                   format: int32
 *                 msg:
 *                   type: string
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/BookReview'
*/
router.get("/user", review.findAllByUserId);
 
module.exports = router;